summaryrefslogtreecommitdiffstats
path: root/src/Entities/Player.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Entities/Player.cpp')
-rw-r--r--src/Entities/Player.cpp43
1 files changed, 24 insertions, 19 deletions
diff --git a/src/Entities/Player.cpp b/src/Entities/Player.cpp
index 22f0655f2..71f7b582f 100644
--- a/src/Entities/Player.cpp
+++ b/src/Entities/Player.cpp
@@ -2330,35 +2330,25 @@ bool cPlayer::SaveToDisk()
-void cPlayer::UseEquippedItem(int a_Amount)
+void cPlayer::UseEquippedItem(short a_Damage)
{
- if (IsGameModeCreative() || IsGameModeSpectator()) // No damage in creative or spectator
+ // No durability loss in creative or spectator modes:
+ if (IsGameModeCreative() || IsGameModeSpectator())
{
return;
}
- // If the item has an unbreaking enchantment, give it a random chance of not breaking:
+ // If the item has an unbreaking enchantment, give it a chance of escaping damage:
+ // Ref: https://minecraft.gamepedia.com/Enchanting#Unbreaking
cItem Item = GetEquippedItem();
int UnbreakingLevel = static_cast<int>(Item.m_Enchantments.GetLevel(cEnchantments::enchUnbreaking));
- if (UnbreakingLevel > 0)
+ double chance = 1 - (1.0 / (UnbreakingLevel + 1));
+ if (GetRandomProvider().RandBool(chance))
{
- double chance = 0.0;
- if (ItemCategory::IsArmor(Item.m_ItemType))
- {
- chance = 0.6 + (0.4 / (UnbreakingLevel + 1));
- }
- else
- {
- chance = 1.0 / (UnbreakingLevel + 1);
- }
-
- if (GetRandomProvider().RandBool(chance))
- {
- return;
- }
+ return;
}
- if (GetInventory().DamageEquippedItem(static_cast<Int16>(a_Amount)))
+ if (GetInventory().DamageEquippedItem(a_Damage))
{
m_World->BroadcastSoundEffect("entity.item.break", GetPosition(), 0.5f, static_cast<float>(0.75 + (static_cast<float>((GetUniqueID() * 23) % 32)) / 64));
}
@@ -2368,6 +2358,21 @@ void cPlayer::UseEquippedItem(int a_Amount)
+void cPlayer::UseEquippedItem(cItemHandler::eDurabilityLostAction a_Action)
+{
+ // Get item being used:
+ cItem Item = GetEquippedItem();
+
+ // Get base damage for action type:
+ short Dmg = cItemHandler::GetItemHandler(Item)->GetDurabilityLossByAction(a_Action);
+
+ UseEquippedItem(Dmg);
+}
+
+
+
+
+
void cPlayer::HandleFood(void)
{
// Ref.: https://minecraft.gamepedia.com/Hunger